// Copyright (c) 2021 Terminus, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package client

import (
	"github.com/erda-project/erda/internal/core/legacy/services/dingtalk/api/interfaces"
	"github.com/erda-project/erda/internal/core/legacy/services/dingtalk/api/native"
)

type dingtalkApiClient struct {
	appKey             string
	appSecret          string
	agentId            int64
	accessTokenManager interfaces.DingtalkAccessTokenManager
	userInfoManager    interfaces.DingtalkUserInfoManager
}

func New(appKey, appSecret string, agentId int64,
	accessTokenManager interfaces.DingtalkAccessTokenManager,
	userInfoManager interfaces.DingtalkUserInfoManager) interfaces.DingtalkApiClient {
	return &dingtalkApiClient{
		appKey:             appKey,
		appSecret:          appSecret,
		agentId:            agentId,
		accessTokenManager: accessTokenManager,
		userInfoManager:    userInfoManager,
	}
}

func (dc *dingtalkApiClient) SendWorkNotice(phones []string, title, content string) error {
	accessToken, err := dc.accessTokenManager.GetAccessToken(dc.appKey)
	if err != nil {
		return err
	}
	userIds, err := dc.userInfoManager.GetUserIdsByPhones(accessToken, dc.agentId, phones)
	if err != nil {
		return err
	}
	err = native.SendCorpConversationMarkdownMessage(accessToken, dc.agentId, userIds, title, content)
	return err
}
